#include <stdio.h>

extern void find_X_max(double *arr, long X, long Y, long Z, double *max);

int main(void)
{
    double a[3 * 2 * 4] = {0.0};
    int i = 0;
    /*输入数组元素*/
    printf("Input elements of a[3][2][4]:\n");
    for(i = 0; i < 3 * 2 * 4; i++)
        scanf("%lf", &a[i]);
    /*调用函数*/
    double x_max[4] = {0.0};
    // 传入首地址+数组长度
    find_X_max(a, 4, 2, 3, x_max);
    /*输出结果*/
    printf("max[4] = \n");
    for(i = 0; i < 4; i++)
        printf("%lf ", x_max[i]);
    printf("\n");
    return 0;
}

void find_X_max(double *arr, long X, long Y, long Z, double *max)
{
    int ix = 0; // 用ix表示x轴坐标（index x）
    // 外层循环遍历X轴的每一维
    for(ix = 0; ix < X; ix++)
    {
        // 打擂方式找到最大值（取坐标(ix,0,0)的数组元素为首任擂主）
        double current_max = arr[0 * Y * X + 0 * X + ix]; 
        // 使用内层循环遍历当前X坐标下，所有的Y和Z轴可能坐标
        int iy = 0, iz = 0;
        for(iy = 0; iy < Y; iy++)
        {
            for(iz = 0; iz < Z; iz++)
            {
                // 将坐标(ix,iy,iz)的元素与擂主进行比较
                if (arr[iz * Y * X + iy * X + ix] > current_max)
                    current_max = arr[iz * Y * X + iy * X + ix];
            }
        }
        // 当前current_max是胜者，存入结果数组
        max[ix] = current_max;
    }
}

/* 输入数据：
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
*/